/**
 * @Project : AlgorithmLearning
 * @Author : Ruoyu Wang
 * @User : Momenta
 * @DateTime : 2024/3/13 19:26
 */

//游游拿到了一个数组，她希望你将数组相同的相邻元素压缩在一起。你能帮帮她吗？
//给定的数组是已经被压缩了一部分的形式，请你继续将其压缩到不能再压缩为止。举个例子，数组[2,3,5,5,5,3]会被压缩成[2(1),3(1),5(3),3(1)]。
//
//输入描述
//  一个字符串，代表待压缩的数组。
//  字符串长度不超过 10^5，且括号内的一定是不超过10^9的正整数。数组中每个元素的值域范围是[-10^9,10^9]
//输出描述
//  一个字符串，表示压缩后的数组。
//
//示例 1
//输入
//[1(2),1(1),-1(3)]
//输出
//[1(3),-1(3)]
//说明
//  该字符串表示的数组是[1,1,1,-1,-1,-1]
//
//示例 2
//输入
//[1(1),2(2),3(31),3(42),2(12)]
//输出
//[1(1),2(2),3(73),2(12)]

#include <iostream>

using namespace std;

int main() {
    string s;
    cin >> s;

    int idx = 1;
    long tmpnum = -0x3f3f3f3f;
    long tmpsum = 0;
    printf("[");
    string res;
    while (idx < s.length() - 1) {
        long tag = 1;
        if (s[idx] == '-') {
            tag *= -1;
            idx++;
        }
        long num = 0;
        while (s[idx] != '(') {
            num = num * 10 + s[idx] - '0';
            idx++;
        }
        num *= tag;
        idx++;
        long sum = 0;
        while (s[idx] != ')') {
            sum = sum * 10 + s[idx] - '0';
            idx++;
        }
        idx++;

        if (tmpnum == num) {
            tmpsum += sum;
        } else {
            if (tmpnum != -0x3f3f3f3f) {
                res += to_string(tmpnum) + "(" + to_string(tmpsum) + "),";
            }
            tmpnum = num;
            tmpsum = sum;
        }
        if ((idx < s.length() - 1) && s[idx] == ',') idx++;
    }
    if (tmpnum != 0x3f3f3f3f) {
        res += to_string(tmpnum) + "(" + to_string(tmpsum) + "),";
    }

    cout << res.substr(0, res.length() - 1);
    printf("]");
}